home *** CD-ROM | disk | FTP | other *** search
/ Power Programmierung 2 / Power-Programmierung CD 2 (Tewi)(1994).iso / c / library / dos / menu / kiwi / demoprg / demofest.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-03-29  |  13.1 KB  |  537 lines

  1. #define DEMO_DEF
  2. #include<dos.h>
  3. #include<string.h>
  4. #include<kiwi_inc.h>
  5. #include<kiwipro.h>
  6. #include<demopro.h>
  7. #include<kiwiwin.h>
  8. #include<kiwilib.h>
  9. #include<kiwiprin.h>
  10. #include<kiwi_mem.h>
  11. #include<demo.h>
  12.  
  13.  
  14.  
  15.  
  16.  
  17. /***********************************************************************************************************/
  18. int festlegungsmenu()
  19. {
  20. static int result=0;
  21. int alt;
  22. WINDOW win=0;
  23. RADIO groesse,menuposition,outmode,maus,hand,saa,shadow,menu_mode,sound;
  24.  
  25.      if(demo_fest.screen_size==C_80x25)groesse=0;
  26. else if(demo_fest.screen_size==C_43_50)groesse=1;
  27. else if(demo_fest.screen_size==SW_80x25)groesse=2;
  28. else                                 groesse=2;
  29.  
  30. if(demo_fest.menu_maus==NACH_MAUS)menuposition=1;
  31. else                           menuposition=0;
  32.  
  33.  
  34. outmode=demo_fest.output_mode;
  35. maus=demo_fest.maus;
  36. hand=demo_fest.maus_hand;
  37. sound=demo_fest.sound;
  38. menu_mode=demo_fest.menu_mode;
  39. shadow=demo_fest.shadow;
  40. saa=demo_fest.saa_zeichen;
  41.  
  42. set_color_table(2);
  43. set_scanf(EXTRA_COL_OFF);
  44. win=load_window("SMFST1 .WND");
  45. do
  46. {
  47.     set_scanf_exit_code(3,8000,0);
  48.     set_scanf_exit_code(4,8001,0);
  49.  
  50.     alt=groesse;
  51.     result=scanf_mask(win,0,    "x",    &groesse,
  52.                 &outmode,
  53.                 &maus,
  54.                 &hand,
  55.                 &sound,
  56.                 &menu_mode,
  57.                 &menuposition,
  58.                 &shadow,
  59.                 &saa
  60.                 /* Button Farbe+Form */
  61.                 /* Button Drucker    */
  62.                 /* Button Datenpfad */
  63.                 /* Button Sonstiges */
  64.                 /* Button Speichern */
  65.                 /* Button Abbruch */
  66.                 /* Button Hilfe    */);
  67.  
  68.     set_scanf_exit_code(3,27,0);
  69.     set_scanf_exit_code(4,27,0);
  70.  
  71.     switch(result){
  72.     case 8000:     sm_bildschirmmenu();
  73.             break;
  74.  
  75.     case 8001:     sm_drucker_menu();
  76.             break;    /*    Drucker        */
  77.  
  78.     case F5 :    
  79.             break;    /* Abbruch        */
  80.  
  81.     case F6 :    
  82.             if(alt!=groesse)sm_change_screen_size(groesse);
  83.  
  84.             demo_fest.output_mode=outmode;
  85.             demo_fest.maus=maus;
  86.             demo_fest.maus_hand=hand;
  87.             demo_fest.sound=sound;
  88.             demo_fest.menu_mode=menu_mode;
  89.             demo_fest.shadow=shadow;
  90.             demo_fest.saa_zeichen=saa;
  91.  
  92.             if(!demo_fest.output_mode)set_output_mode(BIOS);
  93.             else          set_output_mode(DIREKT);
  94.             
  95.             if(demo_fest.maus)set_mouse(ON);
  96.             else           set_mouse(OFF);
  97.  
  98.             if(demo_fest.maus_hand)set_mouse(LEFT_HAND);
  99.             else             set_mouse(RIGHT_HAND);
  100.  
  101.             set_pieps_mode(demo_fest.sound);
  102.  
  103.             switch(demo_fest.menu_mode){
  104.                 case 0:set_menu(PULL_DOWN);break;
  105.                 case 1:set_menu(POP_UP);break;
  106.                 case 2:set_menu(DOPPELKLICK);break;
  107.                 }
  108.  
  109.             if(menuposition)demo_fest.menu_maus=NACH_MAUS;
  110.             else            demo_fest.menu_maus=FESTGELEGT;
  111.             set_menu(demo_fest.menu_maus);
  112.  
  113.  
  114.             if(demo_fest.shadow==1)set_shadow(ON);
  115.             else if(demo_fest.shadow==0)set_shadow(OFF);
  116.  
  117.             if(!demo_fest.saa_zeichen)
  118.             {
  119.                 set_saa_character(24,25,17,16,18,254,197,197);
  120.                 set_window_scroll_bar(OFF);
  121.             }
  122.             else 
  123.             {
  124.                 if(demo_fest.saa_zeichen==1)set_saa_character(30,31,17,16,18,254,254,254);
  125.                 set_window_scroll_bar(ON);
  126.                 if(demo_fest.background==177)set_scroll_bar_character(178);
  127.                 else                      set_scroll_bar_character(177);
  128.             }
  129.             sm_store_fixes();
  130.             break;    /* Speichern und Ende     */
  131.     
  132.     default :    break;
  133.     }
  134.  
  135.  
  136. }while(result!=F5 && result!=F6 && result!=27);
  137.  
  138. set_scanf(EXTRA_COL_ON);
  139. close_window(win);
  140. set_color_table(1);
  141. clear_input_qeue();
  142. return(result);
  143. }
  144.  
  145.  
  146.  
  147.  
  148.  
  149.  
  150. int sm_drucker_menu()
  151. {
  152. int result=0,links,laenge;
  153. WINDOW win=0;
  154. RADIO anschlus,pr_typ;
  155. UCHAR ser=0,par=0,init[SM_PRN_INIT_LEN],deinit[SM_PRN_INIT_LEN],pfad[DATEI_PFAD_LEN];
  156. union REGS regs;
  157.  
  158.  
  159. int86(0x11,®s,®s);
  160. par=ser=regs.h.ah;
  161. par=(par >> 6);        /* Anzahl Parallel    */
  162. ser=((ser >> 1) & 7);    /* Anzahl Seriell    */
  163.  
  164.  
  165. anschlus=demo_fest.printer;
  166. if(anschlus>10)anschlus-=7;
  167.  
  168. set_color_table(3);
  169.  
  170. pr_typ=demo_fest.printer_typ;
  171. memcpy(init,demo_fest.prn_pre_init,sizeof(init));
  172. memcpy(deinit,demo_fest.prn_post_init,sizeof(init));
  173. memcpy(pfad,demo_fest.druck_pfad,sizeof(pfad));
  174. links=demo_fest.linker_rand;
  175. laenge=demo_fest.seiten_laenge;
  176.  
  177.  
  178. win=load_window("SMFST2.WND");
  179. result=scanf_mask(win,0,"x",    &pr_typ,
  180.                 init,
  181.                 deinit,
  182.                 &anschlus,
  183.                 &links,
  184.                 &laenge,
  185.                 pfad
  186.                 /* Button Speichern */
  187.                 /* Button Abbruch   */
  188.                 /* Button Hilfe    */);
  189.  
  190.  
  191. close_window(win);
  192. set_color_table(2);
  193. if(result==F6)
  194. {
  195.     demo_fest.printer_typ=pr_typ;
  196.     memcpy(demo_fest.prn_pre_init,init,sizeof(init));
  197.     memcpy(demo_fest.prn_post_init,deinit,sizeof(init));
  198.     memcpy(demo_fest.druck_pfad,pfad,sizeof(pfad));
  199.     demo_fest.linker_rand=links;
  200.     demo_fest.seiten_laenge=laenge;
  201.     demo_fest.printer=anschlus;
  202.  
  203.     if(demo_fest.printer>3)demo_fest.printer+=7;
  204.     set_printer_output(demo_fest.printer);
  205.  
  206.     switch(demo_fest.printer_typ){
  207.     case 0:    load_print_modes("standard.ksp");    /* init printer         */
  208.         break;
  209.  
  210.     case 1:    load_print_modes("ibm.ksp");        /* init printer         */
  211.         break;
  212.  
  213.     case 2:    load_print_modes("epson.ksp");        /* init printer         */
  214.         break;
  215.  
  216.     case 3:    load_print_modes("hp_laser.ksp");    /* init printer         */
  217.         break;
  218.  
  219.     default:load_print_modes("printer.ksp");    /* init printer         */
  220.         break;
  221.  
  222.     }
  223. }
  224. return(0);
  225. }
  226.  
  227.  
  228.  
  229.  
  230.  
  231.  
  232. int sm_bildschirmmenu()
  233. {
  234. int result=0,i,c,op_del,freq_ein,freq_aus,ton_ein,ton_aus;
  235. static WINDOW win=0,sb=0;
  236. RADIO hintergrund,open_mode,frame,b_typ,b_klick,b_shad;
  237. UINT col1,col2;
  238.  
  239.      if(demo_fest.background==32)hintergrund=0;
  240. else if(demo_fest.background==176)hintergrund=1;
  241. else if(demo_fest.background==177)hintergrund=2;
  242. else if(demo_fest.background==178)hintergrund=3;
  243. else if(demo_fest.background==219)hintergrund=4;
  244.  
  245. if(demo_fest.win_open_mode==EXPLODE)open_mode=0;
  246. else                             open_mode=1;
  247.  
  248. frame=demo_fest.frame_color;
  249. b_typ=demo_fest.button_typ;
  250. b_klick=demo_fest.button_klick;
  251. b_shad=demo_fest.button_shadow;
  252. op_del=demo_fest.open_delay;
  253. freq_ein=demo_fest.button_freq_ein;
  254. freq_aus=demo_fest.button_freq_aus;
  255. ton_ein=demo_fest.button_ton_ein;
  256. ton_aus=demo_fest.button_ton_aus;
  257.  
  258. set_color_table(4);
  259. win=load_window("SMFST3  .WND");
  260. do
  261. {
  262.     set_scanf_exit_code(3,F2,0);
  263.     result=scanf_mask(win,0,"x",&hintergrund,
  264.                 &frame,
  265.                 &b_typ,
  266.                 &b_klick,
  267.                 /* Button Farben */
  268.                 &b_shad,
  269.                 &open_mode,
  270.                 &op_del,
  271.                 &freq_ein,
  272.                 &ton_ein,
  273.                 /* Button OK       */
  274.                 /* Button Abbruch */
  275.                 /* Button Hilfe   */
  276.                 &freq_aus,
  277.                 &ton_aus);
  278.  
  279.     set_scanf_exit_code(3,27,0);
  280.     if(result==F6)
  281.     {
  282.         demo_fest.frame_color=frame;
  283.         demo_fest.button_typ=b_typ;
  284.         demo_fest.button_klick=b_klick;
  285.         demo_fest.button_shadow=b_shad;
  286.         demo_fest.open_delay=op_del;
  287.         demo_fest.button_freq_ein=freq_ein;
  288.         demo_fest.button_freq_aus=freq_aus;
  289.         demo_fest.button_ton_ein=ton_ein;
  290.         demo_fest.button_ton_aus=ton_aus;
  291.  
  292.              if(hintergrund==0)demo_fest.background=32;
  293.         else if(hintergrund==1)demo_fest.background=176;
  294.         else if(hintergrund==2)demo_fest.background=177;
  295.         else if(hintergrund==3)demo_fest.background=178;
  296.         else if(hintergrund==4)demo_fest.background=219;
  297.         change_screen_background(demo_fest.background);
  298.  
  299.         sm_set_frame_color(demo_fest.frame_color);
  300.  
  301.         if(demo_fest.button_typ==0)set_button_mode(KIWI_MODE);
  302.         else if(demo_fest.button_typ==1)set_button_mode(TURBO_MODE);
  303.         else if(demo_fest.button_typ==2)set_button_mode(MICROSOFT);
  304.  
  305.         if(demo_fest.button_shadow==0)set_button_mode(SHADOW_ON);
  306.         else                       set_button_mode(SHADOW_OFF);
  307.  
  308.         if(demo_fest.button_klick==0)set_button_mode(KLICK_ON);
  309.         else                      set_button_mode(KLICK_OFF);
  310.  
  311.         set_button_sound(demo_fest.button_freq_ein,demo_fest.button_ton_ein,
  312.                  demo_fest.button_freq_aus,demo_fest.button_ton_aus);
  313.  
  314.         if(open_mode==0)set_window_display_mode(demo_fest.win_open_mode=EXPLODE);
  315.         else            set_window_display_mode(demo_fest.win_open_mode=ROW_WISE);   
  316.  
  317.         set_window_open_delay(demo_fest.open_delay);
  318.  
  319.     }
  320.     else if(result==F2)
  321.     {
  322.  
  323.         sb=open_window("Setze Farbtabellen fest",AM,1,64,4,EINFACH);
  324.         display_string("Setze Tabelle   von insgesamt 5",sb,AM,1);
  325.         display_string("Farbauswahl mit Return oder linker Maustaste",sb,AM,2);
  326.         set_menu_return_code(4,F4);
  327.         message("F4=Speichern und Ende  F5=vorherige Tabelle  F6=nächste Tabelle   ESC=Abbruch");
  328.         set_help_name("Farbtabellen");
  329.  
  330.         c=i=0;
  331.         do
  332.         {
  333.             display_int(i+1,sb,31,1,1,"r");
  334.             col1=demo_fest.for_col_nor[i] | demo_fest.back_col_nor[i];
  335.             col2=demo_fest.for_col_inv[i] | demo_fest.back_col_inv[i];
  336.             c=choose_color_table(&col1,&col2);
  337.             if(c==F6 || c==F5 || c==F4)
  338.             {
  339.                 demo_fest.for_col_nor[i]=(col1 & 15);     /* Vordergrund ersten 4 Bits */
  340.                 demo_fest.back_col_nor[i]=(col1 & 240);    /* Hintergrund letzen 4 Bits */
  341.                 demo_fest.for_col_inv[i]=(col2 & 15);     /* Vordergrund ersten 4 Bits */
  342.                 demo_fest.back_col_inv[i]=(col2 & 240);    /* Hintergrund letzen 4 Bits */
  343.                 clear_input_qeue();
  344.                 change_color_table(i,(UCHAR)demo_fest.for_col_nor[i],(UCHAR)demo_fest.back_col_nor[i],
  345.                     (UCHAR)demo_fest.for_col_inv[i],(UCHAR)demo_fest.back_col_inv[i]);
  346.  
  347.             }
  348.                  if(c==F6)i++;
  349.             else if(c==F5)i--;
  350.             else if(c==F4)c=(-1);
  351.  
  352.                  if(i>=5)i=0;
  353.             else if(i<0)i=4;
  354.  
  355.         }while(c!=(-1));
  356.         set_menu_return_code(4,13);
  357.         close_window(sb);
  358.         message(" ");
  359.     }
  360.  
  361. }while(result!=F6 && result!=F5 && result!=27);
  362.  
  363. set_color_table(2);
  364. close_window(win);
  365.  
  366. return(result);
  367. }
  368.  
  369.  
  370.  
  371.  
  372.  
  373. int sm_set_frame_color(int c)
  374. {
  375. UCHAR i;
  376.  
  377. switch(c){
  378.     case 0: i=VSCHWARZ;break;/* setzte overscancolor    */
  379.     case 1: i=VBLAU;break;
  380.     case 2: i=VGRUEN;break;
  381.     case 3: i=VROT;break;
  382.     case 4: i=VGRAU;break;
  383.     case 5: i=VWEIS;break;
  384.     case 6: i=VTUERKIS;break;
  385.     case 7: i=VMAGENTA;break;
  386.     case 8: i=VBRAUN;break;
  387.     case 9: i=VHELLBLAU;break;
  388.     case 10:i=VHELLGRUEN;break;
  389.     case 11:i=VHELLROT;break;
  390.     case 12:i=VHELLMAGENTA;break;
  391.     case 13:i=VGELB;break;
  392.     case 14:i=VHELLWEIS;break;
  393.     default:i=VSCHWARZ;break;
  394.      }
  395.  
  396. set_screen_frame(i);    /* Faerbe overscan ein    */
  397. return(i);
  398. }
  399.  
  400.  
  401.  
  402. int sm_load_fixes()
  403. {
  404. FILE *datei;
  405.  
  406. if((datei=fopen("demo.fst","rb"))==NULL)
  407. {
  408.     init_string(demo_fest.anhang,sizeof(demo_fest.anhang));
  409.     demo_fest.screen_size=C_80x25;
  410.     demo_fest.menu_maus=FESTGELEGT;
  411.     demo_fest.menu_mode=PULL_DOWN;
  412.     demo_fest.output_mode=1;
  413.     demo_fest.shadow=1;
  414.     demo_fest.maus=1;
  415.  
  416.     demo_fest.button_freq_ein=150;
  417.     demo_fest.button_freq_aus=100;
  418.     demo_fest.button_ton_ein=2;
  419.     demo_fest.button_ton_aus=2;
  420.  
  421.     demo_fest.win_open_mode=EXPLODE;
  422.     demo_fest.open_delay=10;
  423.  
  424.     demo_fest.for_col_nor[0]=VHELLWEIS;    demo_fest.back_col_nor[0]=HBLAU;
  425.     demo_fest.for_col_inv[0]=VHELLWEIS;    demo_fest.back_col_inv[0]=HWEIS;
  426.  
  427.     demo_fest.for_col_nor[1]=VGELB;        demo_fest.back_col_nor[1]=HROT;
  428.     demo_fest.for_col_inv[1]=VHELLGRUEN;    demo_fest.back_col_inv[1]=HSCHWARZ;
  429.  
  430.     demo_fest.for_col_nor[2]=VHELLROT;    demo_fest.back_col_nor[2]=HWEIS;
  431.     demo_fest.for_col_inv[2]=VGRUEN;    demo_fest.back_col_inv[2]=HSCHWARZ;
  432.  
  433.     demo_fest.for_col_nor[3]=VHELLMAGENTA;    demo_fest.back_col_nor[3]=HBLAU;
  434.     demo_fest.for_col_inv[3]=VHELLGRUEN;    demo_fest.back_col_inv[3]=HWEIS;
  435.  
  436.     demo_fest.for_col_nor[4]=VGELB;        demo_fest.back_col_nor[4]=HSCHWARZ;
  437.     demo_fest.for_col_inv[4]=VBRAUN;    demo_fest.back_col_inv[4]=HWEIS;
  438.  
  439.     return(0);
  440. }
  441. fseek(datei,0l,SEEK_SET);
  442. fread((char *)&demo_fest.screen_size,sizeof(demo_fest),1,datei);
  443.  
  444. fclose(datei);
  445.  
  446.  
  447. return(1);
  448. }
  449.  
  450.  
  451.  
  452.  
  453. int sm_store_fixes()
  454. {
  455. FILE *datei;
  456.  
  457. if((datei=fopen("demo.fst","wb"))==NULL)
  458. {
  459.     create_error("Festlegungen Schreibfehler");
  460.     return(-1);
  461. }
  462.  
  463. fseek(datei,0l,SEEK_SET);
  464. fwrite((char *)&demo_fest.screen_size,sizeof(demo_fest),1,datei);
  465.  
  466. fclose(datei);
  467. return(0);
  468. }
  469.  
  470.  
  471.  
  472. int sm_change_screen_size(UINT groesse)
  473. {
  474. int alt,i,c;
  475. UCHAR ch,atri;
  476.  
  477. alt=get_video_mode();
  478. if(groesse==0 || groesse==1)clear_message();
  479.  
  480. reset_mouse();/* Schalte Maus ab sonst ist der Cursor weg    */
  481. ch=(char)demo_fest.background;
  482. atri=(demo_fest.for_col_nor[0] | demo_fest.back_col_nor[0]);
  483. fill_area(0,1,2,get_screen_wide(),2,ch,atri);
  484. fill_area(0,1,get_screen_height()-1,get_screen_wide(),get_screen_height()-1,ch,atri);
  485. fill_area(0,1,2,1,get_screen_height()-1,ch,atri);
  486. fill_area(0,get_screen_wide(),2,get_screen_wide(),get_screen_height()-1,ch,atri);
  487. fill_area(0,1,get_screen_height()-2,get_screen_wide(),get_screen_height(),ch,atri);
  488. set_init_character(ch);
  489.  
  490. if(groesse==0)/* Normal    */
  491. {
  492.     demo_fest.screen_size=C_80x25;
  493.     if(alt!=SW_80x25)
  494.     {
  495.         demo_fest.screen_size=set_video_mode(C_80x25);
  496.         alt=0;
  497.     }
  498. }
  499. else if(groesse==1)/* Extended Mode */
  500. {
  501.     demo_fest.screen_size=C_43_50;
  502.     if(alt!=SW_80x25)
  503.     {
  504.         demo_fest.screen_size=set_video_mode(C_43_50);
  505.         alt=0;
  506.     }
  507. }
  508. else if(groesse==2)/* Monochrom Mode */
  509. {
  510.     demo_fest.screen_size=SW_80x25;
  511.     if(alt==SW_80x25)
  512.     {
  513.         demo_fest.screen_size=set_video_mode(SW_80x25);
  514.         alt=0;
  515.     }
  516. }
  517. if(!alt)
  518. {
  519.     get_physical_screen_size(&i,&c);    /* Hole Schirmgroesse        */
  520.     save_misplaced_windows(c);
  521.     set_screen_size(i,c);            /* Setzte Interne Buffer um    */
  522.     refresh_screen();            /* Baus Bild wieder auf        */
  523. }                        /* Setze Mausfeld fest        */
  524. box(0,1,2,get_screen_wide(),get_screen_height()-2,EINFACH);
  525. INVERS
  526. fill_area(0,1,get_screen_height()-1,get_screen_wide(),get_screen_height(),32,ATTRIBUT);
  527. NORMAL
  528. set_message_row(get_screen_height()-1);
  529. init_mouse();                /* Schalte Maus ein        */
  530. limit_mouse_area(1,1,get_screen_wide(),get_screen_height());
  531.  
  532. return(0);
  533. }
  534.  
  535.  
  536.  
  537.